#ifndef __KERNEL_DEBUG_H
#define __KERNEL_DEBUG_H
void panic_spin(char *filename, int line, const char *func, const char *condition);

/***************************  __VA_ARGS__  *******************************
 * __VA_ARGS__ 是预处理器所支持的专用标识符。
 * 代表所有与省略号相对应的参数. 
 * "..."表示定义的宏其参数可变.*/
#define PANIC(...) panic_spin(__FILE__, __LINE__, __func__, __VA_ARGS__)
/***********************************************************************/

#ifdef NDEBUG
#define ASSERT(CONDITION) ((void)0)
#else
#define ASSERT(CONDITION)                                                   \
    if (CONDITION)                                                          \
    {                                                                       \
    }                                                                       \
    else                                                                    \
    {                                                                       \
        /* 符号#让编译器将宏的参数转化为字符串字面量 */ \
        PANIC(#CONDITION);                                                  \
    }
#endif /*__NDEBUG */

#endif /*__KERNEL_DEBUG_H*/
